/**
 * @desc 替换字符串中指定的字符串
 *  str,from,to
 *  如果str中不含有from指定的字符，那么返回str
 *  如果有：
 *      含有多个连续的==》 替换为1个
 *      含有一个===》 替换那一个
 * 
 * 思路1:
 *      正则替换：indexOf
 *          只是替换的话，
 *              // let reg = `/${from}/g`;// 替换变量 全局
                //return str.replace(eval(reg),to);
 *          难点:怎么判断字符出现了多次？
 *              出现多次的字符 替换为那一个
 *             将字符转换为数组。遍历,
 *              str = '121abc778'
 *              from = 'abc'
 *              类似数组合并的两指针记录。
 *              str 的start end值。
 *              abc.完了后。from 指针归零。判断a是否等于a。
 *              如果是继续遍历。直至abc之后不再是a
 *              end值的更新是在确定出现了c之后
 *              start更新也是
 *          即使获取了start.end的索引/ 怎么插入一个？
 *              start + from.len
 *              ===> 替换为to
 *              form.len to end 
 *              ==> ""
 *              str.join("")
 *  思路2：
 *      最简单的。。
 *      利用js。
 *      str.split(from)=> 将''转换为to =>.join("");
 */
/*
let res = test("123abcabc456ab5989abc","abc","XXXX");
console.log(res);
function test(str,from,to){
    if(str.indexOf(from)>-1){
        let strarr = str.split(from);
        // 遍历数组
        for(let i=0;i<strarr.length;i++){
            if(strarr[i]===""){
                strarr[i] = to;
            }
        }
        return strarr.join("");
    }else{
        return str;
    }
}
*/

/*
    123abc646  abc XXX
    1.[123""""""646] 对应位置转换为空字符
        123abc646 i指针
        from:abc j指针

        str[i]===from[j],j++
        if(j==from.len) 
            j=0 //从头再来
            将match 位置往前数from.len位置，将这之间的数置为"" 

    2.[123""""""646] 
        设定一个res. 遍历str时
            每次在一大串空字符中，只在遇到的第一个空符那里
            res += res+to
            遇到的第一个空符：
                str[i]==""&&(i==0||str[i]!=="")

*/

strReplace('123abc545','abc','hello')
function strReplace(str,from,to){
    if(str===null||from===null||str===""||from===""){
        return str;
    }
    
    let j = 0;
    let strArr = str.split("");
    // str 目标字符用空符代替
    for(let i=0;i<strArr.length;i++){
        if(strArr[i]===from[j++]){
            if(j===from.length){
                // 将j之前from.length个的字符置为"" 
                clear(strArr,i,from.length);
                j=0;
            }
        }else{
            // 不匹配则立马置为0
            j=0;
        }
    }
    let res = "";
    let cur = "";// 当前一段的字符
    // 遍历strArr 如果为空，则在空的第一个字符替换后面的都不管
    for(let i=0;i<strArr.length;i++){
        if(strArr[i]!==""){
            cur += strArr[i];
        }
        if(strArr[i]===""&&(i===0||strArr[i-1]!=="")){
            res+=res+cur+to;
            cur = "";
        }
    }
    if(cur!==""){
        res = res+cur;
    }   
    return res;
}

function clear(str,end,len){
    while(len-->0){
        str[end--]="";
    }
}   